Bob 5,92+16+8,126,6 : Anim 5,"(6,10)(6,10)L" : Anim On 5 : Rem --- Tap foot ---
'
Reserve Zone 5 : For I=0 To 4 : Set Zone I+1,39,110+(I*16) To 116,110+(I*16)+15 : Next I
'
If _RESET_GAME=False
_NEXT_QUESTION:
Repeat : _ANS=Rnd(5-1) : Until QUESTION(_ANS)<>0 : Repeat : _LOG=Rnd(4-1) : Until GAPS(_LOG)=0
End If
_RESET_GAME=False
'
_FLASH_QUESTION:
For I=0 To 3 : If GAPS(I)=1 : Bob 16+I,239,(I*16)+97,16 : End If : Next I
Gosub _SCREEN_SWAP : Fade 2,$0*2,$777*2,$456*2,$234*2,$363*2,$50*2,$227*2,$117*2,$744*2,$722*2,$742*2,$620*2,$410*2,$210*2,$0*2,$30*2 : Wait 15*2 : For I=0 To 15 : Colour 16+I,Colour(I) : Next I
For I=0 To 4 : Ink 0 : Bar 242,(_LOG*16)+96 To 298,(_LOG*16)+96+15 : Screen Swap : Wait Vbl : Wait 5 : _TEXT[QUESTION$(_ANS),270-((Len(QUESTION$(_ANS))*8)/2),100+_LOG*16] : Screen Swap : Wait Vbl : Wait 5 : Next I
X Mouse=X Hard(80) : Y Mouse=Y Hard(118+(_LOGSEL*16))
If QUESTION(0)=0
If _LOGSEL=_LOWSEL or _LOGSEL=0
If(SC=$4D) or(K$=" ")
For I=0 To 2
If QUESTION(I)=0
Next I
End If
_LOWSEL=I-1
Else
I=4
End If
_LOGSEL=I : X Mouse=X Hard(80) : Y Mouse=Y Hard(118+(_LOGSEL*16))
End If
End If
End If
If K$=Chr$(13)
Extension_1_022E 1,3,0,0 : ZN=Hzone(XM,YM)
End If
'
If((MK=1 and ZN<>0) or(K$=Chr$(13) and ZN<>0))
If QUESTION(ZN-1)<>0 : Extension_1_022E 1,3,0,0 : _LOGSEL=ZN-1 : Sprite Off : Gosub _CHECK_ANSWER
If _DONE and QC<4 : QC=0 : For I=0 To 4 : GAPS(I)=0 : Next I : Gosub _SETUP_QUESTIONS : Goto _RESET_GAME : End If
If _DONE and QC>=4 : QC=0 : _LEVS_BIT : For I=0 To 4 : GAPS(I)=0 : Next I : Gosub _SETUP_QUESTIONS : Goto _RESET_GAME : End If
If CORRECT : Goto _NEXT_QUESTION : End If
End If
End If
'
If SC=69 : Extension_1_022E 1,3,0,0 : _QUIT_BIT : _RESET_GAME=True : Goto _RESET_GAME : End If : Rem *-> Quit box
If SC=89 : Extension_1_022E 1,3,0,0 : _LEVS_BIT : QC=0 : For I=0 To 4 : GAPS(I)=0 : Next I : Gosub _SETUP_QUESTIONS : Goto _RESET_GAME : End If : Rem *-> Level selector
Goto _MAIN
'
'********** SWAP LOGIC AND PHYSIC SCREENS
_SCREEN_SWAP:
Bob Update : Sprite Update : Wait Vbl : Bob Clear : Bob Draw : Screen Swap : Wait Vbl
_DONE=True : For I=0 To 3 : If GAPS(I)=0 : _DONE=False : End If : Next I
'
'*** END OF LEVEL SEQUENCE
If _DONE
Extension_1_022E 1,0,0,0 : Bob 20,134,91,184 : Gosub _SCREEN_SWAP
Wait Vbl : Bob 5,X Bob(5)-3,126,178 : Bob 13,221,106,180 : Bob 14,190,127,182 : Limit Bob 0,0 To 196,200
Move X 13,"(1,-1,85)" : Move X 14,"(1,-1,85)" : Anim 13,"(17,5)(18,5)L" : Anim 14,"(19,5)(20,5)L" : Anim On : Move On
While X Bob(13)>136 : Gosub _SCREEN_SWAP : Wend : Move Off : Anim 13,"(17,8)(18,8)L" : Anim 14,"(19,8)(20,8)L" : Anim 5,"(13,8)(14,8)L" : Anim On
Limit Bob : Timer=0 : Repeat : Gosub _SCREEN_SWAP : Until Timer>200 : Limit Bob 0,0 To 196,200 : Move X 13,"(1,1,85)" : Move X 14,"(1,1,85)" : Move X 5,"(1,1,140)" : Move Y 5,"(2,-1,140)" : Anim 5,"(177,5)(178,5)L"
Anim 13,"(179,5)(180,5)L" : Anim 14,"(181,5)(182,5)L" : Anim On : Move On : While X Bob(13)<221 : Gosub _SCREEN_SWAP : Wend : Move Off
Bob Off 20 : Timer=0 : Repeat : Gosub _SCREEN_SWAP : Until Timer>80 : Limit Bob : Wait Vbl
End If
Return
'
'********** DRAW PILE OF LOGS
_DRAW_LOGS:
For J=0 To 1
Paste Bob 33,100,183
For I=0 To 4
If SKIP<>I and QUESTION(I)<>0
Paste Bob 39+I,102+(I*16),15 : _TEXT[Str$(QUESTION(I)),36+32+I-(Len(Str$(QUESTION(I))-" ")*8)/2,102+(I*16)+4]
End If
Next I
Screen Swap : Wait Vbl
Next J
Return
'
'********** SETUP QUESTIONS
_SETUP_QUESTIONS:
If LEV=1
For I=0 To 4
_L1_ILLEGAL_QUESTION:
T=Rnd(2-1)
If T=0 : A=Rnd(10-1)+1 : B=Rnd(10-1)+1 : ANS=A+B : Gosub _ADD : End If
If T=1 : A=Rnd(20-1)+1 : B=Rnd(10-1)+1 : ANS=A-B : Gosub _SUB : End If
If ANS<2 or ANS>20
Goto _L1_ILLEGAL_QUESTION
End If
For Q=0 To 4
If QUESTION(Q)=QUESTION(I) and Q<>I
Goto _L1_ILLEGAL_QUESTION
End If
Next Q
Next I
End If
If LEV=2
For I=0 To 4
_L2_ILLEGAL_QUESTION:
T=Rnd(2-1)
If T=0 : A=Rnd(30-1)+1 : B=Rnd(30-1)+1 : ANS=A+B : Gosub _ADD : End If
If T=1 : A=Rnd(30-1)+1 : B=Rnd(30-1)+1 : ANS=A-B : Gosub _SUB : End If
If T=0 : A=Rnd(12-1)+1 : B=Rnd(12-1)+1 : ANS=A*B : Gosub _MUL : End If
If T=1 : B=Rnd(12-1)+1 : A=(Rnd(12-1)+1)*B : ANS=A/B : Gosub _DIV : End If
If ANS<2 or ANS>99
Goto _L4_ILLEGAL_QUESTION
End If
For Q=0 To 4
If QUESTION(Q)=QUESTION(I) and Q<>I
Goto _L4_ILLEGAL_QUESTION
End If
Next Q
Next I
End If
Return
'
_ADD:
POS=Rnd(3-1)
If POS=0 : QUESTION(I)=A : QUESTION$(I)=("?+"+Str$(B)+"="+Str$(A+B))-" " : End If
If POS=1 : QUESTION(I)=B : QUESTION$(I)=(Str$(A)+"+?="+Str$(A+B))-" " : End If
If POS=2 : QUESTION(I)=A+B : QUESTION$(I)=(Str$(A)+"+"+Str$(B)+"=?")-" " : End If
Return
_SUB:
POS=Rnd(3-1)
If POS=0 : QUESTION(I)=A : QUESTION$(I)=("?-"+Str$(B)+"="+Str$(A-B))-" " : End If
If POS=1 : QUESTION(I)=B : QUESTION$(I)=(Str$(A)+"-?="+Str$(A-B))-" " : End If
If POS=2 : QUESTION(I)=A-B : QUESTION$(I)=(Str$(A)+"-"+Str$(B)+"=?")-" " : End If
Return
_MUL:
POS=Rnd(3-1)
If POS=0 : QUESTION(I)=A : QUESTION$(I)=("?x"+Str$(B)+"="+Str$(A*B))-" " : End If
If POS=1 : QUESTION(I)=B : QUESTION$(I)=(Str$(A)+"x?="+Str$(A*B))-" " : End If
If POS=2 : QUESTION(I)=A*B : QUESTION$(I)=(Str$(A)+"x"+Str$(B)+"=?")-" " : End If
Return
_DIV:
POS=Rnd(3-1)
If POS=0 : QUESTION(I)=A : QUESTION$(I)=("?/"+Str$(B)+"="+Str$(A/B))-" " : End If
If POS=1 : QUESTION(I)=B : QUESTION$(I)=(Str$(A)+"/?="+Str$(A/B))-" " : End If
If POS=2 : QUESTION(I)=A/B : QUESTION$(I)=(Str$(A)+"/"+Str$(B)+"=?")-" " : End If
Return
'
'********** PROCEDURES
Procedure _QUIT_BIT
Priority Reverse Off
For LOP=1 To 15 : Erase LOP : Next LOP
If Chip Free+Fast Free>250000
Run "Menu_A500.AMOS"
Else
Run "No_Memory.AMOS"
End If
End Proc
Procedure _LEVS_BIT
60000 Rem --- Level select/animation for Fun School 4 (5to7's).
DELAY=50*5 : MXLEV=4 : SPOS=154
'-- Fade out screen and set up level select screen -- '
Fade 1 : Wait 15 : Sprite Off : Bob Off : Update On
Screen Close 0 : Auto View Off : Screen Open 0,320,200,16,Lowres : Flash Off
Curs Off : Fade 1 : Wait 15 : Cls 0 : Double Buffer : Autoback 2
60140 If LEV<MXLEV Then FREDDIEJUMP=1 : Else FREDDIEJUMP=0
60160 Paste Bob 124,8,SPOS
60170 X=148-24*MXLEV : SX=X-48+LEV*48
60190 For L=0 To MXLEV-1 : R=Rnd(1)
Bob 3+L,X+L*48,111+L mod 2,SPOS+7
If R=0 Then Anim 3+L,"("+Str$(SPOS+7)+",8)("+Str$(SPOS+21)+",8)("+Str$(SPOS+22)+",8)l"
If R=1 Then Anim 3+L,"("+Str$(SPOS+22)+",8)("+Str$(SPOS+21)+",8)("+Str$(SPOS+7)+",8)l"
Anim On 3+L : Wait 4
Next L
Bob 2,148,32,SPOS+LEV : Bob 1,SX,120,SPOS+8 : Bob 2,148,32,SPOS+LEV
Auto View On : View : Wait Vbl : Fade 1,$2F,$EEE,$8AC,$468,$6C6,$A0,$44E,$22E,$E88,$E44,$E84,$C40,$820,$EE0,$0,$60 : Wait 15
60290 Timer=0 : Clear Key : SC=0 : I$=""
While I$<>" " and(I$<>Chr$(13))
I$=Inkey$ : If Scancode=89 or Jright(1) Then I$=" "
If Timer>DELAY or Fire(1) Then I$=Chr$(13)
If FREDDIEJUMP=1 Then I$=" "
Wend
If FREDDIEJUMP<>1 Then Extension_1_022E 1,3,0,0
60350 FREDDIEJUMP=0
60360 If I$=Chr$(13) Then 60530
Add LEV,1,1 To MXLEV
60380 Bob 2,148,32,SPOS+LEV
60390 Rem --- Jump frog to next level ---
60400 If LEV=1 Then Gosub 60450 : Goto 60430
60410 Move X 1,"(1,2,24)" : Move Y 1,"(1,-3,6)(1,-2,4)(1,-1,2)(2,0,1)(1,1,2)(1,2,4)(1,3,6)" : Anim 1,"("+Str$(SPOS+10)+",24)("+Str$(SPOS+8)+",1)" : Anim On 1 : Move On 1
60420 Wait 30
60430 Bob 2,148,32,SPOS+LEV
60440 Goto 60290
60442 Rem
60450 Rem --- Swim back to level 1 ---
Move X 1,"(1,2,16)(1,1,16)" : Move Y 1,"(1,-2,6)(1,-1,4)(2,0,1)(1,1,4)(1,2,12)"